#ifndef _GUI_APPLICATION_
#define _GUI_APPLICATION_

#include <string>
#include "Core/Define/Define.h"
#include "Core/GUI/Layout/ILayout.h"

namespace Core
{
	namespace GUI
	{
		class IWindow;
		class IButton;
		class ISlider;
		class ITab;
		class IHorizontalLayout;
		class IVerticalLayout;
		class IBoxLayout;

		class IApplication
		{
		public:
			virtual IWindow * CreateWindowApp(const std::string & _strName, uint32 _iWidth, uint32 _iHeight) = 0;
			virtual void DestroyWindowApp(IWindow * _pWindow) = 0;

			/*virtual IButton * CreateButton(const std::string & _strName) = 0;
			virtual IButton * CreateButton(const std::string & _strName, int _iWidth, int _iHeight) = 0;
			virtual void DestroyButton(IButton * _pButton) = 0;

			virtual ISlider * CreateSlider(int _iMin, int _iMax, int _iDefaultValue) = 0;
			virtual ISlider * CreateSlider(int _iMin, int _iMax, int _iDefaultValue, int _iWidth, int _iHeight) = 0;
			virtual void DestroySlider(ISlider * _pSlider) = 0;

			virtual ITab * CreateTab() = 0;
			virtual ITab * CreateTab(int _iWidth, int _iHeight) = 0;
			virtual void DestroyTab(ITab * _pTab) = 0;

			virtual IVerticalLayout * CreateVerticalLayout(int _iWidth, int _iHeight, Core::GUI::eHorizontalJustify _hJusitfy, Core::GUI::eVerticalJustify _vJusitfy) = 0;
			virtual IVerticalLayout * CreateVerticalLayout(int _iWidth, int _iHeight, Core::GUI::eHorizontalJustify _hJusitfy, Core::GUI::eVerticalJustify _vJusitfy, int _iMarginX, int _iMarginY, int _iPaddingX, int _iPaddingY) = 0;
			virtual void DestroyVerticalLayout(IVerticalLayout * _pVerticalLayout) = 0;

			virtual IHorizontalLayout * CreateHorizontalLayout(int _iWidth, int _iHeight, Core::GUI::eHorizontalJustify _hJusitfy, Core::GUI::eVerticalJustify _vJusitfy) = 0;
			virtual IHorizontalLayout * CreateHorizontalLayout(int _iWidth, int _iHeight, Core::GUI::eHorizontalJustify _hJusitfy, Core::GUI::eVerticalJustify _vJusitfy, int _iMarginX, int _iMarginY, int _iPaddingX, int _iPaddingY) = 0;
			virtual void DestroyHorizontalLayout(IHorizontalLayout * _pHorizontalLayout) = 0;*/

			/*virtual IBoxLayout * CreateBoxLayout() = 0;
			virtual void DestroyBoxLayout(IBoxLayout * _pBoxLayout) = 0;*/
		};
	}
}

#endif // _GUI_APPLICATION_